iT邦幫忙

DAY 22
0

淺入淺出-計算機組織系列 第 22

淺入淺出計組之旅(22)加法和減法的實現 (中)

  • 分享至 

  • xImage
  •  

事實上 add rd, rs, rt 和 addu rd, rs, rt 這兩條指令就是在於 Cout 的處理方式上有所不同

溢出,又稱為 Overflow 表示運算結果超出了正常的表示範圍

而 Overflow 是特別指在 sign value 計算時產生

兩正數相加其結果為負,以及兩負數相加其結果為正的狀況

因為在計算機中我們只能用有限的位元來表示數值

但是在經過運算之後很可能就會產生超過可表示範圍的數

需要注意的是有進位不一定有溢出,有溢出也不代表一定有進位

而溢出的檢查方式就是判斷最高位的進位輸入是否等於最高位的進位輸出

如此一來就在 C31 和 Cout 上分別拉一條線,通過 XOR 邏輯閘就可以知道是否相同

硬體實際上對於有符號或是無符號數的加法處理都是相同的

是否要對溢出做相關處理是由程式設計師來控制

在不同的指令體系中對溢出也有不同的處理方式

MIPS 就是使用前面所提到的提供兩種不同的指令分別作預先處理

若是 add 或 addi 的指令,當發生溢出時控制信號就會當作異常狀況來處理

而如果是 addu 或是 addiu 就不會特別去檢查溢出的信號了

另外在 x86 的架構下就不太相同,他並沒有將指令分成兩種

而是會在產生溢出後將標誌暫存器中的溢出標誌 (Overflow Flag) 設定成 1

再由下一條指令去判斷當 OF=1 時要做什麼處理


上一篇
淺入淺出計組之旅(21)加法和減法的實現 (上)
下一篇
淺入淺出計組之旅(23)加法和減法的實現 (下)
系列文
淺入淺出-計算機組織30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言